In many implementations of a multi-core system, receive-side scaling is used to enable in-order packet delivery by ensuring that only one processor or core processes packets for a single TCP connection. A network adapter or other module may examine each packet header for information identifying the TCP connection, and then apply a hashing function to create an identifier for the packet. The result of the hashing function is used as an index into a table that identifies a specific processor or core, and the packet is directed to the corresponding processor or core.
The hashing function may be selected in an attempt to achieve equal distribution across the table, and may use a hash key or seed created by a random or pseudorandom number generator. However, for some hashing functions commonly used in receive-side scaling, certain hash keys may result in an uneven distribution. Using one of these hash keys as an input to the hashing function may result in some entries of the table that are unused, such that no TCP packet, no matter the header information, may be directed to the corresponding processor or core. This may result in unbalancing, inefficiency of the multi-core system, and require computationally-intensive load rebalancing and inter-core packet transfers.